【问题标题】:Updating the table from stored procedure using openrowset使用 openrowset 从存储过程更新表
【发布时间】:2018-06-28 07:01:47
【问题描述】:

我正在尝试从存储过程更新表中的 [IsUnique-check] 列。我尝试以下代码。

ALTER PROCEDURE spIsUnique
    @columnname NVARCHAR(MAX),
    @tablename NVARCHAR(MAX)
AS
BEGIN
    EXEC ('select IIf (count(*)>1,''False'',''True'') as [IsUnique-check] 
           from '+@tablename+' 
           group by '+@columnname)
END

DECLARE @start INT, @count INT,
        @applicableforcolumn VARCHAR(MAX),
        @name VARCHAR(MAX)

SET @start = 1

SELECT @count = COUNT(*) 
FROM dbo.fnplatformnumber23()

WHILE @start <= @count
BEGIN
    SELECT @name = name 
    FROM sys.columns 
    WHERE object_id = OBJECT_ID('fnplatformnumber23') 
      AND column_id = @start

    IF @name = 'IsUnique'
    BEGIN
        SELECT @applicableforcolumn = ApplicableForColumn
        FROM dbo.fnplatformnumber23()
        WHERE IsUnique IS NOT NULL;

        EXEC spIsUnique @applicableforcolumn,'fnproduct()'
        --declare @alter nvarchar(max)= 'alter table ##producttable add [IsUnique-check] nvarchar(max);'
        --exec sp_executesql @alter

        UPDATE ##producttable 
        SET [IsUnique-check] = EXEC spIsUnique @applicableforcolumn 'fnproduct()' from OPENROWSET('SQL Server',
    'Server=DESKTOP-JEQ4NUR\SQLEXPRESS;Trusted_Connection=yes;',

    'exec spIsUnique '+@applicableforcolumn+' ''fnproduct()'';'
)
    END

    SET @start = @start + 1
END

但它在 exec 附近显示不正确的语法。

帮我解决一下

【问题讨论】:

  • 显示spIsUnique proc 代码以了解它如何返回值
  • 我已经编辑了,请看
  • openrowset() 不接受表达式。不要认为它也接受变量。您可能需要使用Dynamic SQL 来形成查询并使用sp_executesql 来执行它
  • Update table set column = exec astoredproc 绝对不正确。您需要先将 proc 中的值返回为标量值

标签: sql-server tsql stored-procedures openrowset


【解决方案1】:

OPENROWSET 不支持参数。因此,请将您的查询作为查询字符串并使用sp_executesqlEXEC 执行。可能是这样的

DECLARE @SQL VARCHAR(MAX) = '
SELECT 
    * 
    FROM OPENROWSET(''SQL Server'',
    ''Server=DESKTOP-JEQ4NUR\SQLEXPRESS;Trusted_Connection=yes;'',

    ''exec spIsUnique '''+@applicableforcolumn+''',fnproduct());'


exec(@SQL)

将上述结果插入临时表,然后通过加入该临时表来更新最终表

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多