![](/img/trans.png)
[英]How to check if a table exists and return a value (0/1) if it doesn't without using a stored procedure?
[英]How return value exec in table function without using a stored procedure?
我想要返回表功能,但錯誤是
在函數中無效使用副作用運算符“ INSERT EXEC”。
我的代碼:
CREATE FUNCTION [dbo].[Fn_GetTable]
(@ID AS NVARCHAR(MAX))
RETURNS
@Tbl TABLE (ID NVARCHAR(MAX))
AS
BEGIN
DECLARE @str AS NVARCHAR(MAX)
SET @str = 'SELECT * FROM support WHERE support IN ('+@ID+')'
INSERT INTO @Tbl (ID)
EXEC sp_executesql @str
RETURN
END
UDF中禁止包含sp_executesql
過程。 https://docs.microsoft.com/en-us/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine
我不明白您為什么需要動態。 嘗試
Create FUNCTION [dbo].[Fn_GetTable] (
@ID as nvarchar(MAX)
)
RETURNS
@Tbl TABLE (
ID nvarchar(MAX)
) AS
BEGIN
INSERT INTO @Tbl (ID)
select *
from support
where support in (@ID)
RETURN
END
如果參數應該表示一個列表,則最好使用UDT。 https://docs.microsoft.com/zh-cn/sql/relational-databases/clr-integration-database-objects-user-defined-types/working-with-user-defined-types-in-sql-server 。 演示
CREATE TYPE dbo.UDT_IDS AS TABLE (ID NVARCHAR(MAX)) ;
並將其用作參數
CREATE FUNCTION [dbo].[Fn_GetTable] (
@IDS as dbo.UDT_IDS READONLY
)
RETURNS
@Tbl TABLE (
ID NVARCHAR(MAX)
) AS
BEGIN
INSERT INTO @Tbl (ID)
SELECT support
FROM support
WHERE support in (SELECT ID FROM @IDS)
RETURN
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.